package consola;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Date;

import xml.manager.PersistenciaLaberinto;
import xml.manager.PersistenciaOrdenPacman;
import xml.manager.PersistenciaPersonajes;
import dominio.Juego;
import dominio.Laberinto;
import dominio.Sentido;


public class Consola {
	
	private static String directorioRecursos = "resources";
	private static String rutaDirectorioExportacion = "";
	
	public static void main(String[] args) {
		if (!init(directorioRecursos + "/laberintos/laberinto.xml")) {
			return;
		}
		
		Integer cantidadCiclos = 0;
		do {
			
			File ordenPacman = new File(nombreArchivoOrdenPacman(cantidadCiclos));
			while(!ordenPacman.exists());
			Sentido sentido;
			try {
				
				sentido = PersistenciaOrdenPacman.getInstance().cargarOrden(nombreArchivoOrdenPacman(cantidadCiclos));
				Juego.getInstance().nuevoTick(sentido);
				PersistenciaLaberinto.getInstance().guardarLaberinto(Juego.getInstance().getLaberinto(), 
							nombreArchivoSalidaLaberinto(cantidadCiclos));
				PersistenciaPersonajes.getInstance().guardarJuego(Juego.getInstance(), 
							nombreArchivoSalidaPersonajes(cantidadCiclos));
				
				cantidadCiclos++;
				
			} catch (IOException e) {
				e.printStackTrace();
				break;
			}
			
		} while (!Juego.getInstance().terminoPartida());
		

	}
	
	private static String nombreArchivoOrdenPacman(Integer cantidadCiclos) {
		return directorioRecursos + "/pacman/pacmanTick" + cantidadCiclos.toString() + ".xml";
	}
	
	private static String nombreArchivoSalidaLaberinto(Integer cantidadCiclos) {
		return rutaDirectorioExportacion + "/LaberintoTick_" + cantidadCiclos.toString() + ".xml";
	}

	private static String nombreArchivoSalidaPersonajes(Integer cantidadCiclos) {
		return rutaDirectorioExportacion + "/PersonajesTick_" + cantidadCiclos.toString() + ".xml";
	}
	
	private static Boolean init(String string) {
		Laberinto laberinto;
		try {
			laberinto = PersistenciaLaberinto.getInstance().cargarLaberinto(string);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
			return false;
		}
		
		if (!crearCarpetaParaExportarArchivos()) {
			return false;
		}
		
		Juego.getInstance().setLaberinto(laberinto);
		Juego.getInstance().inicializarPartida();
		return true;
	}

	private static boolean crearCarpetaParaExportarArchivos() {
		rutaDirectorioExportacion = new String(directorioRecursos + "/ejecuciones/" + new Long(new Date().getTime()).toString() );
		File directorio = new File(rutaDirectorioExportacion);
		
		return directorio.mkdirs();		
	}

}
